package edu.unmsm.ocaa.sisocaa.negocio.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

import edu.unmsm.ocaa.sisocaa.integracion.dao.RespuestaDAO;
import edu.unmsm.ocaa.sisocaa.integracion.dao.RptaComentarioOpcDAO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.ComentarioOpcDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.OpcPregFichaDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.PregFichaMostrarDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.RespuestaDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.RespuestaconOpcDTO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.RptaComentarioOpcDTO;
import edu.unmsm.ocaa.sisocaa.negocio.service.OpcPregFichaService;
import edu.unmsm.ocaa.sisocaa.negocio.service.RespuestaService;

@Service
public class RespuestaServiceImpl implements RespuestaService {

	@Resource
	RespuestaDAO respdao;
	@Resource
	RptaComentarioOpcDAO respcomdao;
	@Resource
	OpcPregFichaService opcserv;
	@Override
	public void guardarRespuestasxFichaUsuario(
			List<PregFichaMostrarDTO> usupregs) throws DataAccessException {
		// TODO Auto-generated method stub
		for (int i = 0; i < usupregs.size(); i++) {
			PregFichaMostrarDTO usupreg=usupregs.get(i);
			if (usupreg.getId_tiporesp()==1) {
				RespuestaDTO resp=new RespuestaDTO();
				resp.setId_ficha(usupreg.getId_ficha());
				resp.setId_opcpregficha(usupreg.getItemSelected());
				resp.setId_usuario(usupreg.getId_usuario());
				resp.setId_pregficha(usupreg.getId_pregficha());
				respdao.deleteRespuestaAnterior(resp);
				guardarRespuestaxPreg(resp);
			}else {
				String[] items=usupreg.getItemSelecteds();
				for (int j = 0; j < items.length; j++) {
					RespuestaDTO resp=new RespuestaDTO();
					Integer opc=Integer.parseInt(items[j]);
					resp.setId_ficha(usupreg.getId_ficha());
					resp.setId_opcpregficha(opc);
					resp.setId_usuario(usupreg.getId_usuario());
					resp.setId_pregficha(usupreg.getId_pregficha());
					guardarRespuestaxPreg(resp);					
				}
			}
			if (usupreg.getShowCom().equals(true)) {
				List<ComentarioOpcDTO> coms=usupreg.getComs();
				for (int j = 0; j < coms.size(); j++) {
					RptaComentarioOpcDTO rptacom=new RptaComentarioOpcDTO();
					ComentarioOpcDTO com=coms.get(j);
					rptacom.setDsc_rpta(com.getRpta());
					rptacom.setId_comentarioopc(com.getId_comentarioopc());
					rptacom.setId_ficha(com.getId_ficha());
					rptacom.setId_opcpregficha(com.getId_opcpregficha());
					rptacom.setId_pregficha(com.getId_pregficha());
					rptacom.setUsuid(usupreg.getId_usuario());
					respcomdao.insertRptaCom(rptacom);
				}
			}
		}
	}

	@Override
	public void guardarRespuestaxPreg(RespuestaDTO resp)
			throws DataAccessException {
		respdao.insertRespuesta(resp);
	}

	@Override
	public List<RespuestaDTO> listarRespuestas(Integer idFicha,
			Integer idUsuario) throws DataAccessException {
		// TODO Auto-generated method stub
		return respdao.getRespuestas(idFicha, idUsuario);
	}

	@Override
	public List<RespuestaDTO> listarRespuestaxPreg(Integer idFicha,
			Integer idPregficha, Integer idUsuario) throws DataAccessException {
		// TODO Auto-generated method stub
		return respdao.getRespuesta(idFicha, idPregficha, idUsuario);
	}

	@Override
	public boolean RevisayGuardarRespxFichaUsu(
			List<PregFichaMostrarDTO> usupregs) {
		Boolean vacios=new Boolean(false);
		for (int i = 0; i < usupregs.size(); i++) {
			PregFichaMostrarDTO usupreg=usupregs.get(i);
			if (usupreg.getId_tiporesp()==1) {
				if (usupreg.getItemSelected()==null) {
					i=usupregs.size();
					vacios=true;
				}else if (usupreg.getItemSelected()==0) {
					i=usupregs.size();
					vacios=true;
				}else{
					for (int j = 0; j < usupreg.getComs().size(); j++) {
						if (usupreg.getComs().get(j).getId_opcpregficha().equals(usupreg.getItemSelected()) && usupreg.getComs().get(j).getRpta().trim().length()==0) {
							vacios=true;
						}
					}
				}
			}else {
				if (usupreg.getItemSelecteds().length<1) {
					i=usupregs.size();
					vacios=true;
				}
			}
		}
		return vacios;
	}
	
	@Override
	public List<RespuestaconOpcDTO> listarRespxPregconOpc(Integer idFicha,
			Integer idPregficha, Integer idUsuario) throws DataAccessException {
		// TODO Auto-generated method stub
		List<RespuestaDTO> resps= respdao.getRespuesta(idFicha, idUsuario, idPregficha);
		List<RespuestaconOpcDTO> respconopc= new ArrayList<RespuestaconOpcDTO>();
		for (int i = 0; i < resps.size(); i++) {
			RespuestaDTO resp=resps.get(i);
			RespuestaconOpcDTO respopc=new RespuestaconOpcDTO();
			OpcPregFichaDTO opc=opcserv.obtenerOpcion(idFicha, idPregficha, resp.getId_opcpregficha());
			respopc.setDesc_opcpregficha(opc.getDsc_opcpregficha());
			respopc.setId_ficha(resp.getId_ficha());
			respopc.setId_opcpregficha(resp.getId_opcpregficha());
			respopc.setId_pregficha(idPregficha);
			respopc.setId_usuario(idUsuario);
			List<RptaComentarioOpcDTO> listcom=respcomdao.selectRptaComxOpc(respopc.getId_ficha(), 
					respopc.getId_pregficha(), respopc.getId_opcpregficha(), respopc.getId_usuario());
			respopc.setListcom(listcom);
			respconopc.add(respopc);
		}
		return respconopc;
	}

	@Override
	public Integer listarRespuestasxPregTotales(Integer idFicha,
			Integer idPregficha, Integer idOpcpregficha, Integer idDep) {
		// TODO Auto-generated method stub
		List<RespuestaDTO> resps=respdao.getRespuestasxOpc(idFicha, idPregficha, idOpcpregficha, idDep);
		Integer total=resps.size();
		return total;
	}

	@Override
	public Integer listarPregsRespondidasTotales(Integer idFicha,
			Integer idPregficha, Integer id_dep) {
		// TODO Auto-generated method stub
		List<RespuestaDTO> resps=respdao.getRespuestasxPreg(idFicha, idPregficha, id_dep);
		Integer total=resps.size();
		return total;
	}

	@Override
	public Integer sumaPuntajesxPreg(Integer idFichaParam, Integer idPregficha, Integer id_dep, Integer pond) {
		// TODO Auto-generated method stub
		Integer ptje=0;
		RespuestaDTO resp=respdao.getTotPtjexPreg(idFichaParam, idPregficha, id_dep, pond);
		if (resp!=null) {
			ptje=resp.getId_usuario();
		}
		return ptje;
	}

}
